{
 "cells": [
  {
   "cell_type": "code",
   "execution_count": 1,
   "metadata": {},
   "outputs": [],
   "source": [
    "import sys\n",
    "import os\n",
    "searchPath=os.path.abspath('..')\n",
    "sys.path.append(searchPath)"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 2,
   "metadata": {},
   "outputs": [],
   "source": [
    "from math import exp\n",
    "import numpy as np\n",
    "import pandas as pd\n",
    "import matplotlib.pyplot as plt\n",
    "from sklearn.datasets import load_iris\n",
    "from sklearn.model_selection import train_test_split\n",
    "from sklearn.linear_model import LogisticRegression\n",
    "\n",
    "from logistic_regression.LogisticRegressionClassifier import LogisticRegressionClassifier\n",
    "\n",
    "%matplotlib inline"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 3,
   "metadata": {},
   "outputs": [],
   "source": [
    "def create_data():\n",
    "    iris = load_iris()\n",
    "    df = pd.DataFrame(iris.data, columns=iris.feature_names)\n",
    "    df['label'] = iris.target\n",
    "    df.columns = ['sepal length', 'sepal width', 'petal length', 'petal width', 'label']\n",
    "    data = np.array(df.iloc[:100, [0,1,-1]])\n",
    "    return data[:,:2], data[:,-1]"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 4,
   "metadata": {},
   "outputs": [],
   "source": [
    "X, y = create_data()\n",
    "X_train, X_test, y_train, y_test = train_test_split(X, y, test_size=0.3)"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 5,
   "metadata": {},
   "outputs": [
    {
     "name": "stdout",
     "output_type": "stream",
     "text": [
      "LogisticRegression Model(learning_rate=0.01,max_iter=200)\n"
     ]
    }
   ],
   "source": [
    "lr_clf = LogisticRegressionClassifier()\n",
    "lr_clf.fit(X_train, y_train)"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 6,
   "metadata": {},
   "outputs": [
    {
     "data": {
      "text/plain": [
       "0.9666666666666667"
      ]
     },
     "execution_count": 6,
     "metadata": {},
     "output_type": "execute_result"
    }
   ],
   "source": [
    "lr_clf.score(X_test, y_test)"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 7,
   "metadata": {},
   "outputs": [
    {
     "data": {
      "text/plain": [
       "<matplotlib.legend.Legend at 0x110f419b0>"
      ]
     },
     "execution_count": 7,
     "metadata": {},
     "output_type": "execute_result"
    },
    {
     "data": {
      "image/png": "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\n",
      "text/plain": [
       "<matplotlib.figure.Figure at 0x110ec5908>"
      ]
     },
     "metadata": {},
     "output_type": "display_data"
    }
   ],
   "source": [
    "x_ponits = np.arange(4, 8)\n",
    "y_ = -(lr_clf.weights[1]*x_ponits + lr_clf.weights[0])/lr_clf.weights[2]\n",
    "plt.plot(x_ponits, y_)\n",
    "\n",
    "#lr_clf.show_graph()\n",
    "plt.scatter(X[:50,0],X[:50,1], label='0')\n",
    "plt.scatter(X[50:,0],X[50:,1], label='1')\n",
    "plt.legend()"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 8,
   "metadata": {},
   "outputs": [],
   "source": [
    "clf = LogisticRegression(max_iter=200)"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 9,
   "metadata": {},
   "outputs": [
    {
     "data": {
      "text/plain": [
       "LogisticRegression(C=1.0, class_weight=None, dual=False, fit_intercept=True,\n",
       "          intercept_scaling=1, max_iter=200, multi_class='ovr', n_jobs=1,\n",
       "          penalty='l2', random_state=None, solver='liblinear', tol=0.0001,\n",
       "          verbose=0, warm_start=False)"
      ]
     },
     "execution_count": 9,
     "metadata": {},
     "output_type": "execute_result"
    }
   ],
   "source": [
    "clf.fit(X_train, y_train)"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 10,
   "metadata": {},
   "outputs": [
    {
     "data": {
      "text/plain": [
       "0.9666666666666667"
      ]
     },
     "execution_count": 10,
     "metadata": {},
     "output_type": "execute_result"
    }
   ],
   "source": [
    "clf.score(X_test, y_test)"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 11,
   "metadata": {},
   "outputs": [
    {
     "name": "stdout",
     "output_type": "stream",
     "text": [
      "[[ 1.96009958 -3.32381638]] [-0.39036387]\n"
     ]
    }
   ],
   "source": [
    "print(clf.coef_, clf.intercept_)"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 12,
   "metadata": {},
   "outputs": [
    {
     "data": {
      "text/plain": [
       "<matplotlib.legend.Legend at 0x1110519b0>"
      ]
     },
     "execution_count": 12,
     "metadata": {},
     "output_type": "execute_result"
    },
    {
     "data": {
      "image/png": "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\n",
      "text/plain": [
       "<matplotlib.figure.Figure at 0x10c0ca860>"
      ]
     },
     "metadata": {},
     "output_type": "display_data"
    }
   ],
   "source": [
    "x_ponits = np.arange(4, 8)\n",
    "y_ = -(clf.coef_[0][0]*x_ponits + clf.intercept_)/clf.coef_[0][1]\n",
    "plt.plot(x_ponits, y_)\n",
    "\n",
    "plt.plot(X[:50, 0], X[:50, 1], 'bo', color='blue', label='0')\n",
    "plt.plot(X[50:, 0], X[50:, 1], 'bo', color='orange', label='1')\n",
    "plt.xlabel('sepal length')\n",
    "plt.ylabel('sepal width')\n",
    "plt.legend()"
   ]
  }
 ],
 "metadata": {
  "kernelspec": {
   "display_name": "Python 3",
   "language": "python",
   "name": "python3"
  },
  "language_info": {
   "codemirror_mode": {
    "name": "ipython",
    "version": 3
   },
   "file_extension": ".py",
   "mimetype": "text/x-python",
   "name": "python",
   "nbconvert_exporter": "python",
   "pygments_lexer": "ipython3",
   "version": "3.6.4"
  }
 },
 "nbformat": 4,
 "nbformat_minor": 2
}
